/*
 *  This file is part of the SIRIUS libraries for analyzing MS and MS/MS data
 *
 *  Copyright (C) 2024 Bright Giant GmbH
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along with SIRIUS.  If not, see <http://www.gnu.org/licenses/>.
 *
 *  NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 *  https://openapi-generator.tech
 *  Do not edit the class manually.
 */


package io.sirius.ms.sdk.model;

import java.util.Objects;
import java.util.Arrays;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.annotation.JsonValue;
import io.sirius.ms.sdk.model.AnnotatedSpectrum;
import io.sirius.ms.sdk.model.CanopusPrediction;
import io.sirius.ms.sdk.model.CompoundClasses;
import io.sirius.ms.sdk.model.Deviation;
import io.sirius.ms.sdk.model.FragmentationTree;
import io.sirius.ms.sdk.model.IsotopePatternAnnotation;
import io.sirius.ms.sdk.model.LipidAnnotation;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.annotation.JsonTypeName;

/**
 * Molecular formula candidate that holds a unique identifier (molecular formula + adduct).  It can be extended with optional scoring metrics and the raw results  such as fragmentation trees and simulated isotope pattern.
 */
@JsonPropertyOrder({
  FormulaCandidate.JSON_PROPERTY_FORMULA_ID,
  FormulaCandidate.JSON_PROPERTY_MOLECULAR_FORMULA,
  FormulaCandidate.JSON_PROPERTY_ADDUCT,
  FormulaCandidate.JSON_PROPERTY_RANK,
  FormulaCandidate.JSON_PROPERTY_SIRIUS_SCORE_NORMALIZED,
  FormulaCandidate.JSON_PROPERTY_SIRIUS_SCORE,
  FormulaCandidate.JSON_PROPERTY_ISOTOPE_SCORE,
  FormulaCandidate.JSON_PROPERTY_TREE_SCORE,
  FormulaCandidate.JSON_PROPERTY_ZODIAC_SCORE,
  FormulaCandidate.JSON_PROPERTY_NUM_OF_EXPLAINED_PEAKS,
  FormulaCandidate.JSON_PROPERTY_NUM_OF_EXPLAINABLE_PEAKS,
  FormulaCandidate.JSON_PROPERTY_TOTAL_EXPLAINED_INTENSITY,
  FormulaCandidate.JSON_PROPERTY_MEDIAN_MASS_DEVIATION,
  FormulaCandidate.JSON_PROPERTY_FRAGMENTATION_TREE,
  FormulaCandidate.JSON_PROPERTY_ANNOTATED_SPECTRUM,
  FormulaCandidate.JSON_PROPERTY_ISOTOPE_PATTERN_ANNOTATION,
  FormulaCandidate.JSON_PROPERTY_LIPID_ANNOTATION,
  FormulaCandidate.JSON_PROPERTY_PREDICTED_FINGERPRINT,
  FormulaCandidate.JSON_PROPERTY_COMPOUND_CLASSES,
  FormulaCandidate.JSON_PROPERTY_CANOPUS_PREDICTION
})
@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.14.0")
public class FormulaCandidate {
  public static final String JSON_PROPERTY_FORMULA_ID = "formulaId";
  @jakarta.annotation.Nullable
  private String formulaId;

  public static final String JSON_PROPERTY_MOLECULAR_FORMULA = "molecularFormula";
  @jakarta.annotation.Nullable
  private String molecularFormula;

  public static final String JSON_PROPERTY_ADDUCT = "adduct";
  @jakarta.annotation.Nullable
  private String adduct;

  public static final String JSON_PROPERTY_RANK = "rank";
  @jakarta.annotation.Nullable
  private Integer rank;

  public static final String JSON_PROPERTY_SIRIUS_SCORE_NORMALIZED = "siriusScoreNormalized";
  @jakarta.annotation.Nullable
  private Double siriusScoreNormalized;

  public static final String JSON_PROPERTY_SIRIUS_SCORE = "siriusScore";
  @jakarta.annotation.Nullable
  private Double siriusScore;

  public static final String JSON_PROPERTY_ISOTOPE_SCORE = "isotopeScore";
  @jakarta.annotation.Nullable
  private Double isotopeScore;

  public static final String JSON_PROPERTY_TREE_SCORE = "treeScore";
  @jakarta.annotation.Nullable
  private Double treeScore;

  public static final String JSON_PROPERTY_ZODIAC_SCORE = "zodiacScore";
  @jakarta.annotation.Nullable
  private Double zodiacScore;

  public static final String JSON_PROPERTY_NUM_OF_EXPLAINED_PEAKS = "numOfExplainedPeaks";
  @jakarta.annotation.Nullable
  private Integer numOfExplainedPeaks;

  public static final String JSON_PROPERTY_NUM_OF_EXPLAINABLE_PEAKS = "numOfExplainablePeaks";
  @jakarta.annotation.Nullable
  private Integer numOfExplainablePeaks;

  public static final String JSON_PROPERTY_TOTAL_EXPLAINED_INTENSITY = "totalExplainedIntensity";
  @jakarta.annotation.Nullable
  private Double totalExplainedIntensity;

  public static final String JSON_PROPERTY_MEDIAN_MASS_DEVIATION = "medianMassDeviation";
  @jakarta.annotation.Nullable
  private Deviation medianMassDeviation;

  public static final String JSON_PROPERTY_FRAGMENTATION_TREE = "fragmentationTree";
  @jakarta.annotation.Nullable
  private FragmentationTree fragmentationTree;

  public static final String JSON_PROPERTY_ANNOTATED_SPECTRUM = "annotatedSpectrum";
  @jakarta.annotation.Nullable
  private AnnotatedSpectrum annotatedSpectrum;

  public static final String JSON_PROPERTY_ISOTOPE_PATTERN_ANNOTATION = "isotopePatternAnnotation";
  @jakarta.annotation.Nullable
  private IsotopePatternAnnotation isotopePatternAnnotation;

  public static final String JSON_PROPERTY_LIPID_ANNOTATION = "lipidAnnotation";
  @jakarta.annotation.Nullable
  private LipidAnnotation lipidAnnotation;

  public static final String JSON_PROPERTY_PREDICTED_FINGERPRINT = "predictedFingerprint";
  @jakarta.annotation.Nullable
  private List<Double> predictedFingerprint;

  public static final String JSON_PROPERTY_COMPOUND_CLASSES = "compoundClasses";
  @jakarta.annotation.Nullable
  private CompoundClasses compoundClasses;

  public static final String JSON_PROPERTY_CANOPUS_PREDICTION = "canopusPrediction";
  @jakarta.annotation.Nullable
  private CanopusPrediction canopusPrediction;

  public FormulaCandidate() {
  }

  public FormulaCandidate formulaId(@jakarta.annotation.Nullable String formulaId) {
    
    this.formulaId = formulaId;
    return this;
  }

  /**
   * Unique identifier of this formula candidate
   * @return formulaId
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_FORMULA_ID)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getFormulaId() {
    return formulaId;
  }


  @JsonProperty(JSON_PROPERTY_FORMULA_ID)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setFormulaId(@jakarta.annotation.Nullable String formulaId) {
    this.formulaId = formulaId;
  }

  public FormulaCandidate molecularFormula(@jakarta.annotation.Nullable String molecularFormula) {
    
    this.molecularFormula = molecularFormula;
    return this;
  }

  /**
   * molecular formula of this formula candidate
   * @return molecularFormula
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_MOLECULAR_FORMULA)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getMolecularFormula() {
    return molecularFormula;
  }


  @JsonProperty(JSON_PROPERTY_MOLECULAR_FORMULA)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setMolecularFormula(@jakarta.annotation.Nullable String molecularFormula) {
    this.molecularFormula = molecularFormula;
  }

  public FormulaCandidate adduct(@jakarta.annotation.Nullable String adduct) {
    
    this.adduct = adduct;
    return this;
  }

  /**
   * Adduct of this formula candidate
   * @return adduct
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_ADDUCT)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getAdduct() {
    return adduct;
  }


  @JsonProperty(JSON_PROPERTY_ADDUCT)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setAdduct(@jakarta.annotation.Nullable String adduct) {
    this.adduct = adduct;
  }

  public FormulaCandidate rank(@jakarta.annotation.Nullable Integer rank) {
    
    this.rank = rank;
    return this;
  }

  /**
   * Get rank
   * @return rank
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_RANK)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Integer getRank() {
    return rank;
  }


  @JsonProperty(JSON_PROPERTY_RANK)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setRank(@jakarta.annotation.Nullable Integer rank) {
    this.rank = rank;
  }

  public FormulaCandidate siriusScoreNormalized(@jakarta.annotation.Nullable Double siriusScoreNormalized) {
    
    this.siriusScoreNormalized = siriusScoreNormalized;
    return this;
  }

  /**
   * Normalized Sirius Score of the formula candidate.  If NULL result is not available
   * @return siriusScoreNormalized
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_SIRIUS_SCORE_NORMALIZED)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Double getSiriusScoreNormalized() {
    return siriusScoreNormalized;
  }


  @JsonProperty(JSON_PROPERTY_SIRIUS_SCORE_NORMALIZED)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setSiriusScoreNormalized(@jakarta.annotation.Nullable Double siriusScoreNormalized) {
    this.siriusScoreNormalized = siriusScoreNormalized;
  }

  public FormulaCandidate siriusScore(@jakarta.annotation.Nullable Double siriusScore) {
    
    this.siriusScore = siriusScore;
    return this;
  }

  /**
   * Sirius Score (isotope + tree score) of the formula candidate.  If NULL result is not available
   * @return siriusScore
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_SIRIUS_SCORE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Double getSiriusScore() {
    return siriusScore;
  }


  @JsonProperty(JSON_PROPERTY_SIRIUS_SCORE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setSiriusScore(@jakarta.annotation.Nullable Double siriusScore) {
    this.siriusScore = siriusScore;
  }

  public FormulaCandidate isotopeScore(@jakarta.annotation.Nullable Double isotopeScore) {
    
    this.isotopeScore = isotopeScore;
    return this;
  }

  /**
   * Get isotopeScore
   * @return isotopeScore
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_ISOTOPE_SCORE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Double getIsotopeScore() {
    return isotopeScore;
  }


  @JsonProperty(JSON_PROPERTY_ISOTOPE_SCORE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setIsotopeScore(@jakarta.annotation.Nullable Double isotopeScore) {
    this.isotopeScore = isotopeScore;
  }

  public FormulaCandidate treeScore(@jakarta.annotation.Nullable Double treeScore) {
    
    this.treeScore = treeScore;
    return this;
  }

  /**
   * Get treeScore
   * @return treeScore
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_TREE_SCORE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Double getTreeScore() {
    return treeScore;
  }


  @JsonProperty(JSON_PROPERTY_TREE_SCORE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setTreeScore(@jakarta.annotation.Nullable Double treeScore) {
    this.treeScore = treeScore;
  }

  public FormulaCandidate zodiacScore(@jakarta.annotation.Nullable Double zodiacScore) {
    
    this.zodiacScore = zodiacScore;
    return this;
  }

  /**
   * Zodiac Score of the formula candidate.  If NULL result is not available
   * @return zodiacScore
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_ZODIAC_SCORE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Double getZodiacScore() {
    return zodiacScore;
  }


  @JsonProperty(JSON_PROPERTY_ZODIAC_SCORE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setZodiacScore(@jakarta.annotation.Nullable Double zodiacScore) {
    this.zodiacScore = zodiacScore;
  }

  public FormulaCandidate numOfExplainedPeaks(@jakarta.annotation.Nullable Integer numOfExplainedPeaks) {
    
    this.numOfExplainedPeaks = numOfExplainedPeaks;
    return this;
  }

  /**
   * Get numOfExplainedPeaks
   * @return numOfExplainedPeaks
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_NUM_OF_EXPLAINED_PEAKS)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Integer getNumOfExplainedPeaks() {
    return numOfExplainedPeaks;
  }


  @JsonProperty(JSON_PROPERTY_NUM_OF_EXPLAINED_PEAKS)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setNumOfExplainedPeaks(@jakarta.annotation.Nullable Integer numOfExplainedPeaks) {
    this.numOfExplainedPeaks = numOfExplainedPeaks;
  }

  public FormulaCandidate numOfExplainablePeaks(@jakarta.annotation.Nullable Integer numOfExplainablePeaks) {
    
    this.numOfExplainablePeaks = numOfExplainablePeaks;
    return this;
  }

  /**
   * Get numOfExplainablePeaks
   * @return numOfExplainablePeaks
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_NUM_OF_EXPLAINABLE_PEAKS)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Integer getNumOfExplainablePeaks() {
    return numOfExplainablePeaks;
  }


  @JsonProperty(JSON_PROPERTY_NUM_OF_EXPLAINABLE_PEAKS)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setNumOfExplainablePeaks(@jakarta.annotation.Nullable Integer numOfExplainablePeaks) {
    this.numOfExplainablePeaks = numOfExplainablePeaks;
  }

  public FormulaCandidate totalExplainedIntensity(@jakarta.annotation.Nullable Double totalExplainedIntensity) {
    
    this.totalExplainedIntensity = totalExplainedIntensity;
    return this;
  }

  /**
   * Get totalExplainedIntensity
   * @return totalExplainedIntensity
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_TOTAL_EXPLAINED_INTENSITY)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Double getTotalExplainedIntensity() {
    return totalExplainedIntensity;
  }


  @JsonProperty(JSON_PROPERTY_TOTAL_EXPLAINED_INTENSITY)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setTotalExplainedIntensity(@jakarta.annotation.Nullable Double totalExplainedIntensity) {
    this.totalExplainedIntensity = totalExplainedIntensity;
  }

  public FormulaCandidate medianMassDeviation(@jakarta.annotation.Nullable Deviation medianMassDeviation) {
    
    this.medianMassDeviation = medianMassDeviation;
    return this;
  }

  /**
   * Get medianMassDeviation
   * @return medianMassDeviation
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_MEDIAN_MASS_DEVIATION)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Deviation getMedianMassDeviation() {
    return medianMassDeviation;
  }


  @JsonProperty(JSON_PROPERTY_MEDIAN_MASS_DEVIATION)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setMedianMassDeviation(@jakarta.annotation.Nullable Deviation medianMassDeviation) {
    this.medianMassDeviation = medianMassDeviation;
  }

  public FormulaCandidate fragmentationTree(@jakarta.annotation.Nullable FragmentationTree fragmentationTree) {
    
    this.fragmentationTree = fragmentationTree;
    return this;
  }

  /**
   * Get fragmentationTree
   * @return fragmentationTree
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_FRAGMENTATION_TREE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public FragmentationTree getFragmentationTree() {
    return fragmentationTree;
  }


  @JsonProperty(JSON_PROPERTY_FRAGMENTATION_TREE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setFragmentationTree(@jakarta.annotation.Nullable FragmentationTree fragmentationTree) {
    this.fragmentationTree = fragmentationTree;
  }

  public FormulaCandidate annotatedSpectrum(@jakarta.annotation.Nullable AnnotatedSpectrum annotatedSpectrum) {
    
    this.annotatedSpectrum = annotatedSpectrum;
    return this;
  }

  /**
   * Get annotatedSpectrum
   * @return annotatedSpectrum
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_ANNOTATED_SPECTRUM)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public AnnotatedSpectrum getAnnotatedSpectrum() {
    return annotatedSpectrum;
  }


  @JsonProperty(JSON_PROPERTY_ANNOTATED_SPECTRUM)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setAnnotatedSpectrum(@jakarta.annotation.Nullable AnnotatedSpectrum annotatedSpectrum) {
    this.annotatedSpectrum = annotatedSpectrum;
  }

  public FormulaCandidate isotopePatternAnnotation(@jakarta.annotation.Nullable IsotopePatternAnnotation isotopePatternAnnotation) {
    
    this.isotopePatternAnnotation = isotopePatternAnnotation;
    return this;
  }

  /**
   * Get isotopePatternAnnotation
   * @return isotopePatternAnnotation
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_ISOTOPE_PATTERN_ANNOTATION)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public IsotopePatternAnnotation getIsotopePatternAnnotation() {
    return isotopePatternAnnotation;
  }


  @JsonProperty(JSON_PROPERTY_ISOTOPE_PATTERN_ANNOTATION)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setIsotopePatternAnnotation(@jakarta.annotation.Nullable IsotopePatternAnnotation isotopePatternAnnotation) {
    this.isotopePatternAnnotation = isotopePatternAnnotation;
  }

  public FormulaCandidate lipidAnnotation(@jakarta.annotation.Nullable LipidAnnotation lipidAnnotation) {
    
    this.lipidAnnotation = lipidAnnotation;
    return this;
  }

  /**
   * Get lipidAnnotation
   * @return lipidAnnotation
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_LIPID_ANNOTATION)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public LipidAnnotation getLipidAnnotation() {
    return lipidAnnotation;
  }


  @JsonProperty(JSON_PROPERTY_LIPID_ANNOTATION)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setLipidAnnotation(@jakarta.annotation.Nullable LipidAnnotation lipidAnnotation) {
    this.lipidAnnotation = lipidAnnotation;
  }

  public FormulaCandidate predictedFingerprint(@jakarta.annotation.Nullable List<Double> predictedFingerprint) {
    
    this.predictedFingerprint = predictedFingerprint;
    return this;
  }

  public FormulaCandidate addPredictedFingerprintItem(Double predictedFingerprintItem) {
    if (this.predictedFingerprint == null) {
      this.predictedFingerprint = new ArrayList<>();
    }
    this.predictedFingerprint.add(predictedFingerprintItem);
    return this;
  }

  /**
   * Probabilistic molecular fingerprint predicted by CSI:FingerID
   * @return predictedFingerprint
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_PREDICTED_FINGERPRINT)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<Double> getPredictedFingerprint() {
    return predictedFingerprint;
  }


  @JsonProperty(JSON_PROPERTY_PREDICTED_FINGERPRINT)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setPredictedFingerprint(@jakarta.annotation.Nullable List<Double> predictedFingerprint) {
    this.predictedFingerprint = predictedFingerprint;
  }

  public FormulaCandidate compoundClasses(@jakarta.annotation.Nullable CompoundClasses compoundClasses) {
    
    this.compoundClasses = compoundClasses;
    return this;
  }

  /**
   * Get compoundClasses
   * @return compoundClasses
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_COMPOUND_CLASSES)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public CompoundClasses getCompoundClasses() {
    return compoundClasses;
  }


  @JsonProperty(JSON_PROPERTY_COMPOUND_CLASSES)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setCompoundClasses(@jakarta.annotation.Nullable CompoundClasses compoundClasses) {
    this.compoundClasses = compoundClasses;
  }

  public FormulaCandidate canopusPrediction(@jakarta.annotation.Nullable CanopusPrediction canopusPrediction) {
    
    this.canopusPrediction = canopusPrediction;
    return this;
  }

  /**
   * Get canopusPrediction
   * @return canopusPrediction
   */
  @jakarta.annotation.Nullable
  @JsonProperty(JSON_PROPERTY_CANOPUS_PREDICTION)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public CanopusPrediction getCanopusPrediction() {
    return canopusPrediction;
  }


  @JsonProperty(JSON_PROPERTY_CANOPUS_PREDICTION)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setCanopusPrediction(@jakarta.annotation.Nullable CanopusPrediction canopusPrediction) {
    this.canopusPrediction = canopusPrediction;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    FormulaCandidate formulaCandidate = (FormulaCandidate) o;
    return Objects.equals(this.formulaId, formulaCandidate.formulaId) &&
        Objects.equals(this.molecularFormula, formulaCandidate.molecularFormula) &&
        Objects.equals(this.adduct, formulaCandidate.adduct) &&
        Objects.equals(this.rank, formulaCandidate.rank) &&
        Objects.equals(this.siriusScoreNormalized, formulaCandidate.siriusScoreNormalized) &&
        Objects.equals(this.siriusScore, formulaCandidate.siriusScore) &&
        Objects.equals(this.isotopeScore, formulaCandidate.isotopeScore) &&
        Objects.equals(this.treeScore, formulaCandidate.treeScore) &&
        Objects.equals(this.zodiacScore, formulaCandidate.zodiacScore) &&
        Objects.equals(this.numOfExplainedPeaks, formulaCandidate.numOfExplainedPeaks) &&
        Objects.equals(this.numOfExplainablePeaks, formulaCandidate.numOfExplainablePeaks) &&
        Objects.equals(this.totalExplainedIntensity, formulaCandidate.totalExplainedIntensity) &&
        Objects.equals(this.medianMassDeviation, formulaCandidate.medianMassDeviation) &&
        Objects.equals(this.fragmentationTree, formulaCandidate.fragmentationTree) &&
        Objects.equals(this.annotatedSpectrum, formulaCandidate.annotatedSpectrum) &&
        Objects.equals(this.isotopePatternAnnotation, formulaCandidate.isotopePatternAnnotation) &&
        Objects.equals(this.lipidAnnotation, formulaCandidate.lipidAnnotation) &&
        Objects.equals(this.predictedFingerprint, formulaCandidate.predictedFingerprint) &&
        Objects.equals(this.compoundClasses, formulaCandidate.compoundClasses) &&
        Objects.equals(this.canopusPrediction, formulaCandidate.canopusPrediction);
  }

  @Override
  public int hashCode() {
    return Objects.hash(formulaId, molecularFormula, adduct, rank, siriusScoreNormalized, siriusScore, isotopeScore, treeScore, zodiacScore, numOfExplainedPeaks, numOfExplainablePeaks, totalExplainedIntensity, medianMassDeviation, fragmentationTree, annotatedSpectrum, isotopePatternAnnotation, lipidAnnotation, predictedFingerprint, compoundClasses, canopusPrediction);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class FormulaCandidate {\n");
    sb.append("    formulaId: ").append(toIndentedString(formulaId)).append("\n");
    sb.append("    molecularFormula: ").append(toIndentedString(molecularFormula)).append("\n");
    sb.append("    adduct: ").append(toIndentedString(adduct)).append("\n");
    sb.append("    rank: ").append(toIndentedString(rank)).append("\n");
    sb.append("    siriusScoreNormalized: ").append(toIndentedString(siriusScoreNormalized)).append("\n");
    sb.append("    siriusScore: ").append(toIndentedString(siriusScore)).append("\n");
    sb.append("    isotopeScore: ").append(toIndentedString(isotopeScore)).append("\n");
    sb.append("    treeScore: ").append(toIndentedString(treeScore)).append("\n");
    sb.append("    zodiacScore: ").append(toIndentedString(zodiacScore)).append("\n");
    sb.append("    numOfExplainedPeaks: ").append(toIndentedString(numOfExplainedPeaks)).append("\n");
    sb.append("    numOfExplainablePeaks: ").append(toIndentedString(numOfExplainablePeaks)).append("\n");
    sb.append("    totalExplainedIntensity: ").append(toIndentedString(totalExplainedIntensity)).append("\n");
    sb.append("    medianMassDeviation: ").append(toIndentedString(medianMassDeviation)).append("\n");
    sb.append("    fragmentationTree: ").append(toIndentedString(fragmentationTree)).append("\n");
    sb.append("    annotatedSpectrum: ").append(toIndentedString(annotatedSpectrum)).append("\n");
    sb.append("    isotopePatternAnnotation: ").append(toIndentedString(isotopePatternAnnotation)).append("\n");
    sb.append("    lipidAnnotation: ").append(toIndentedString(lipidAnnotation)).append("\n");
    sb.append("    predictedFingerprint: ").append(toIndentedString(predictedFingerprint)).append("\n");
    sb.append("    compoundClasses: ").append(toIndentedString(compoundClasses)).append("\n");
    sb.append("    canopusPrediction: ").append(toIndentedString(canopusPrediction)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}

